#!/bin/bash

# 检查是否为 root 用户
if [ "$(id -u)" -ne 0 ]; then
    echo "请使用 root 用户运行此脚本！"
    exit 1
fi
#更新
sudo apt update
# 安装 GNOME、Vino 及分辨率工具
install_packages() {
    echo "正在安装 GNOME 桌面和工具..."
    apt update -y
    apt install -y gnome-session gnome-control-center vino x11-xserver-utils
}

# 配置 2K 分辨率
configure_resolution() {
    local resolution="2560x1440"
    local rate="60"
    echo "正在配置 2K 分辨率（$resolution）..."

    # 生成分辨率模型（Modeline）
    local modeline=$(cvt 2560 1440 $rate | grep "Modeline" | sed 's/Modeline //')
    local mode_name=$(echo $modeline | awk '{print $1}' | tr -d \")

    # 创建新分辨率模式
    sudo -u $SUDO_USER xrandr --newmode $modeline
    local output=$(sudo -u $SUDO_USER xrandr | grep " connected" | awk '{print $1}')

    # 应用分辨率到当前显示器
    sudo -u $SUDO_USER xrandr --addmode $output $mode_name
    sudo -u $SUDO_USER xrandr --output $output --mode $mode_name

    # 持久化配置（写入用户启动脚本）
    echo "xrandr --newmode $modeline" >> /home/$SUDO_USER/.profile
    echo "xrandr --addmode $output $mode_name" >> /home/$SUDO_USER/.profile
    echo "xrandr --output $output --mode $mode_name" >> /home/$SUDO_USER/.profile
}

# 配置 VNC 密码
configure_vino() {
    read -p "请输入VNC连接密码（至少 6 位）: " vnc_pass
    local encoded_pass=$(echo -n "$vnc_pass" | base64)

    # 设置 Vino 参数
    sudo -u $SUDO_USER dbus-launch gsettings set org.gnome.Vino require-encryption false
    sudo -u $SUDO_USER dbus-launch gsettings set org.gnome.Vino prompt-enabled false
    sudo -u $SUDO_USER dbus-launch gsettings set org.gnome.Vino authentication-methods "['vnc']"
    sudo -u $SUDO_USER dbus-launch gsettings set org.gnome.Vino vnc-password "$encoded_pass"
}

# 强制使用 Xorg 会话
force_xorg() {
    echo "切换至 Xorg 会话..."
    sed -i 's/#WaylandEnable=false/WaylandEnable=false/g' /etc/gdm3/custom.conf
}

# 配置开机自启
enable_autostart() {
    echo "设置服务开机启动..."
    cat > /etc/xdg/autostart/vino-server.desktop <<EOF
[Desktop Entry]
Type=Application
Name=Vino VNC Server
Exec=/usr/lib/vino/vino-server
NoDisplay=true
EOF
    chmod +x /etc/xdg/autostart/vino-server.desktop
}

# 开放防火墙端口
configure_firewall() {
    if command -v ufw &> /dev/null; then
        echo "开放 VNC 端口（5900）..."
        ufw allow 5900/tcp
        ufw reload
    fi
}

# 主流程
main() {
    install_packages
    configure_resolution
    configure_vino
    force_xorg
    enable_autostart
    configure_firewall

}

# 执行主函数
main